package com.wjw.java.collection.set_;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * 1.LinkedHashSet是HashSet子类
 * 2.LinkedHashSet底层是一个LinkedHashMap:数组+双向链表
 * 3.LinkedHashSet根据元素的hashCode值来决定元素的存储位置
 * 同时使用链表维护元素的次序
 * 4.LinkedHashSet不允许添加重复数据
 * ------------------------------------------------------
 * 1.LinkedHashSet中有head(首元素)和tail(尾元素)
 * 2.每一个元素都是一个Entry,都有before和after属性
 *   before记录的是上一个元素
 *   after记录的是下一个元素
 * 3.在add()元素时,先计算hash值,再求索引,确定该元素在table表中的位置
 *   然后将添加的元素加入到双向链表,如果存在,则不添加(同HashSet)
 * 4.这样遍历LinkedHashSet时,就能保证插入的顺序和遍历的顺序一致
 *
 */
public class Detail_LinkedHashSet {
    public static void main(String[] args) {
        Set set = new LinkedHashSet();
        set.add("张三");
        set.add(123);
        set.add(123);
        set.add(456);
    }
}
